package pers.chao.tool.date;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;

import java.time.LocalDateTime;
import java.util.Date;

/**
 * Description: 简单时间格式化工具
 *
 * @author W.Chao
 * @date 2020/10/31 18:00
 **/
public final class EasyDateFormat {
	private EasyDateFormat() {
	}

	public static String getNowyyyyMMddHHmmss() {
		return DateUtil.format(new Date(), DatePattern.yyyyMMddHHmmss.getPattern());
	}

	public static String getNowyyyyMMdd() {
		return DateUtil.format(new Date(), DatePattern.yyyyMMdd.getPattern());
	}

	public static String getNowHHmmss() {
		return DateUtil.format(new Date(), DatePattern.HHmmss.getPattern());
	}

	public static String getNowyyyyMMddHHmm() {
		return DateUtil.format(new Date(), DatePattern.yyyyMMddHHmm.getPattern());
	}

	public static String getNowyyyyMMddHHmmssSSS() {
		return DateUtil.format(new Date(), DatePattern.yyyyMMddHHmmssSSS.getPattern());
	}

	public static String yyyyMMddTHHmmssZ() {
		return DateUtil.format(new Date(), DatePattern.yyyyMMddTHHmmssZ.getPattern());
	}

	public static String yyyyMMddTHHmmssSSSZ() {
		return DateUtil.format(new Date(), DatePattern.yyyyMMddTHHmmssSSSZ.getPattern());
	}

	public static String yyyyMMddTHHmmssZ2() {
		return DateUtil.format(new Date(), DatePattern.yyyyMMddTHHmmssZ2.getPattern());
	}

	public static String yyyyMMddTHHmmssSSSZ2() {
		return DateUtil.format(new Date(), DatePattern.yyyyMMddTHHmmssSSSZ2.getPattern());
	}

	/**
	 * 格式化为中文日期格式
	 *
	 * @param date
	 * @param isUppercase 如果isUppercase为false，则返回类似：2018年10月24日，否则返回二〇一八年十月二十四日
	 * @param withTime    是否包含时间部分
	 * @return
	 */
	public static String formatChineseDate(Date date, boolean isUppercase, boolean withTime) {
		return DateUtil.formatChineseDate(date, isUppercase, withTime);
	}

	/**
	 * 标准日期格式遵循RFC 1123规范，格式类似于：Fri, 31 Dec 1999 23:59:59 GMT
	 *
	 * @param date
	 * @return
	 */
	public static String formatHttpDate(Date date) {
		return DateUtil.formatHttpDate(date);
	}

	/**
	 * 将字符串日期转换为期望的格式日期
	 *
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String format(String date, String pattern) {
		return DateUtil.format(DateUtil.parse(date), pattern);
	}

	/**
	 * 将日期转换为期望的格式日期
	 *
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String format(Date date, String pattern) {
		return DateUtil.format(date, pattern);
	}

	/**
	 * 将日期转换为期望的格式日期
	 *
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String format(LocalDateTime date, String pattern) {
		return DateUtil.format(date, pattern);
	}

	/**
	 * 将日期转换为期望的格式日期
	 *
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String format(DateTime date, String pattern) {
		return DateUtil.format(date, pattern);
	}

	/**
	 * 将时间戳转换为期望的格式日期
	 *
	 * @param timestamp
	 * @param pattern
	 * @return
	 */
	public static String format(Long timestamp, String pattern) {
		return DateUtil.format(new Date(timestamp), pattern);
	}

	public static DateTime parseDateTime(String date) {
		return DateUtil.parse(date);
	}

	public static Date parseDate(String date) {
		return DateUtil.parse(date);
	}

	public static Long toMillis(String date) {
		return DateUtil.parse(date).getTime();
	}

	public static Long toMillis(Date date) {
		return date.getTime();
	}

	public static String convertPattern(String plainPattern) {
		return DatePattern.of(plainPattern);
	}

	public static String defaultPattern() {
		return DatePattern.yyyyMMddHHmmssSSS.getPattern();
	}
}
